package com.demo.strategy;

/**
 * Created by chenhe17596 on 2017/6/25.
 */
public abstract class Duck {

    private FlayStrategy flayStrategy; //飞行接口


    /**
     * 所有鸭子共同的特征，子类不必要重写
     */
    void voice(){
        System.out.println("嘎嘎嘎");
    }

    /**
     * 所有鸭子都有的属性，但是每个鸭子都不一样，所以子类必须重写，所以用abstract
     */
    abstract void display();

    /**
     * 飞行是个别鸭子的属性，不是所有。
     * 飞行有多种飞行方式，子类一一实现的话会很繁琐，所以需要复用代码。这里调用接口来实现，具体的实现类需要使用的时候传进来
     */
    void fly(){
        flayStrategy.fly();
    }


    /**
     * 接收飞行实现类的传入
     * @param flayStrategy
     */
    public void setFlayStrategy(FlayStrategy flayStrategy){
        this.flayStrategy = flayStrategy;
    }

}
